<?php
/**
 * Xdebug コードカバレッジワークフローレポートクラス
 * ワークフローによって実行される処理ステップを記録するクラス
 */
class CCV_XdebugWorkflowReport extends object
{
	public $programFileReport = array();
	protected static $_done = FALSE;

	public function __construct()
	{
		/*** xdebugが組み込まれていない場合なにもしないことにする */
		if (!function_exists('xdebug_start_code_coverage')) {
			return;
		}
		/*** すでに解析がスタートしている場合は、再スタートはしない */
		if (self::$_done === FALSE) {
			self::$_done = TRUE;
			xdebug_start_code_coverage();
		}
	}

	public function analyze()
	{
		/*** 解析がスタートしていない場合は何もしない */
		if (self::$_done === FALSE) {
			return;
		}
		/*** 解析情報をもらう*/
		$analyzeReport = xdebug_get_code_coverage();

		foreach ($analyzeReport as $fileName => $stepNums) {
			$this->reportModule[] = new CCV_ProgramFileReport($fileName, $stepNums);
		}
	}
}

/**
 * プログラムファイルについてコードカバレッジを記録するクラス
 */
class CCV_ProgramFileReport extends  object
{
	public $fileName = '';
	public $passedStepNums = array();

	public function __construct($fileName, $passedStepNums)
	{
		parent::__construct();
		$this->fileName = $fileName;
		$this->passedStepNums = $passedStepNums;
	}
}